#ifndef _BSP_TIMER_H
#define _BSP_TIMER_H

#include "stm32f4xx_hal.h"
#include "tim.h"
#include <stdio.h>
#include "main.h"

#define USE_TIM3			
//#define USE_TIM2
//#define USE_TIM4
//#define USE_TIM5

// 软件定时器个数
#define TMR_COUNT				4

/* 定时器模式 */
typedef enum
{
	TMR_ONCE_MODE = 0,		// 单次模式
	TMR_AUTO_MODE,				// 自动模式
} TMR_MODE_E;

/* 定时器结构体,需使用volatile,防止被优化 */
typedef struct
{
	__IO uint8_t Mode;			// 计数模式	
	__IO uint8_t Flag;			// 定时到达标志
	__IO uint32_t Count;		// 计数值
	__IO uint32_t PreLoad;	// 预装载值
} SOFT_TMR;

extern void (*s_TIM_CallBack1)(void);

void bsp_InitTimer(void);
void bsp_RunPer1ms(void);
void bsp_RunPer10ms(void);
void bsp_StartTimer(uint8_t _id, uint32_t _period);
void bsp_StartAutoTimer(uint8_t _id, uint32_t _period);
void bsp_StopTimer(uint8_t _id);
uint8_t bsp_CheckTimer(uint8_t _id);
int32_t bsp_GetRunTime(void);
int32_t bsp_CheckRunTime(int32_t _LastTime);
void bsp_startHardTimer(uint8_t _CC, uint32_t ucTimeOut, void *_pCallBack);

#endif

